#ifndef __TELEVISION_H__
#define __TELEVISION_H__
class Television;
// 遥控器的类
class Control
{
public:
    void setState(Television *p, bool st);      // 设置电视机状态
    void setVolume(Television *p, int vol);     // 设置电视机音量
    void setChannel(Television *p, int chn);    // 设置电视机频道

    void showTelevision(Television *p);      // 显示电视机参数
    void changeState(Television *p);         // 改变电视机状态
    void increaseVolume(Television *p);      // 增加音量
    void decreaseVolume(Television *p);      // 减小音量
    void increaseChannel(Television *p);     // 增加频道
    void decreaseChannel(Television *p);     // 减小频道
};

// 电视机类 单例模式
class Television
{
    friend class Control;
private:
    enum{CLOSE, OPEN};
    enum{MIN_VOLUME, MAX_VOLUME = 10};
    enum{MIN_CHANNEL = 1, MAX_CHANNEL = 100};

public:
    void showTelevision(void);      // 显示电视机参数
    void changeState(void);         // 改变电视机状态
    void increaseVolume(void);      // 增加音量
    void decreaseVolume(void);      // 减小音量
    void increaseChannel(void);     // 增加频道
    void decreaseChannel(void);     // 减小频道

private:
    // 构造与析构函数
    Television();
    Television(int stat, int vol, int chn);
    Television(const Television &ob);
    
public:
    ~Television();

public:
    // 推出单例模式指针
    static Television *pushPointer(void);

    // 重载指向运算符
    Television *operator->();

    // 重载解引用运算符
    Television operator*();

private:
    static Television * const p;    // 电视机类指针
    int mState;     // 电视机的状态
    int mVolume;    // 电视机的音量
    int mChannel;   // 电视机的频道

};

// 电视机智能指针类
class SmartPointer
{
public:
    SmartPointer();
    SmartPointer(Television *p);
    ~SmartPointer();
private:
    Television *p;
};







#endif/*__TELEVISION_H__*/